# 容器
"""
str
list
tuple
"""
# 普通数据
"""
int float
bool
None
"""
# 可变不可变
"""
# 可变
list
dict
# 不可变
tuple
str
int float
bool
"""

# TODO 字符串基础 定义
# 单引号
str1 = 'hello'
# 双引号
str2 = "hello"
# 说明: 单引号双引号的定义方式没有区别
# 三单引号
str3 = '''hello'''
# 三双引号
str4 = """hello"""
print(str3, type(str3))
print(str4, type(str4))
# 说明：三单引号和三双引号没有任何区别
print('==' * 20)
# 三个引号和2个引号的区别
# 三个引号的字符串会保留字符串的原生格式
str5 = 'hello' \
       'world'
str6 = '''
    hello
    world
'''
print(str5)  # helloworld
print(str6)
'''
    hello
    world
'''
# TODO 索引
str1 = 'hello'
# 利用索引去查询数据
print(str1[0])
print(str1[-1])

# 利用索引修改数据
# 说明：字符串不可以修改
# str1[0] = 'f'

# TODO 切片
str1 = 'hello'
print(str1[:4])

# 字符串反转
str2 = str1[::-1]
print(str2)

# 转义符 \
str1 = 'I\'m sam'
print(str1)
# \n 换行
print('hello\nworld')
print('--' * 20)
# \r 换行
print('hello\rworld')
# \t 制表符
print('hello\tworld')
print('==' * 20)

# TODO 遍历
# for
str1 = 'python'
for char in str1:
    print(char)
print('==' * 20)

# while
i = 0
while i < len(str1):
    print(str1[i])
    i += 1

# TODO str.isspace()  判断字符串是否是空格
str1 = 'hello'
print(str1.isspace())  # False

str2 = 'hello world'
print(str2.isspace())  # False

str3 = ' '
print(str3.isspace())  # True

# TODO * str.isalnum()  判断字符串是数字或者字母
print('hello'.isalnum())  # True
print('123'.isalnum())  # True

# TODO * str.isalpha()  判断字符串是字母
print('abc'.isalpha())  # True
print('123'.isalpha())  # False
print('a12'.isalpha())  # False

# TODO str.isdecimal() 判断字符串是整数
print('123'.isdecimal())  # True
print('11.1'.isdecimal())  # False

# TODO * str.isdigit() 判断字符串是整数
print('123'.isdigit())  # True
print('12.3'.isdigit())  # False

# TODO str.isnumeric() 判断字符串是整数，支持中文
print('一二三'.isnumeric())  # True
print('12.3'.isnumeric())  # False

# TODO str.istitle() 判断字符串中单词首字母大写
print('hello world'.istitle())  # False
print('Hello world'.istitle())  # False
print('Hello World'.istitle())  # True

# TODO str.islower() 判断字符串是全小写
print('hello world'.islower())  # True
print('Hello world'.islower())  # False
print('hello World'.islower())  # False

# TODO str.isupper() 判断字符串是全大写
print('Hello world'.isupper())  # False
print('hello World'.isupper())  # False
print('HELLO WORLD'.isupper())  # True

# TODO str.isdigit() 特殊格式的数字
print('①'.isdigit())  # True
print('1'.isdigit())  # True

# TODO str.isnumeric()
print('123'.isnumeric())  # True
print('123'.isnumeric())  # True

num = input('num1：')  # 2
# 判断是数字在进行转换
if num.isdigit():
    num = int(num)
print(num)
print('==' * 20)

# TODO string.startswith(str)  判断string是否以str开头
print('hello world'.startswith('hell'))
print('1hello world'.startswith('he'))

# TODO string.endswith(str)  判断string是否以str结束
print('hello world'.endswith('ld'))
print('1hello world'.endswith('ldd'))

# TODO string.find(str)  判断str在string字符串中的位置（下标）。不在返回-1。从左查。
print('python'.find('p'))
print('python'.find('on'))
print('python'.find('ff'))  # -1
print('hello'.find('l'))

# TODO string.rfind(str)  判断str在string字符串中的位置（下标）。不在返回-1。从右查。
print('hello'.rfind('l'))
print('hello'.rfind('f'))

# TODO string.index(str) 判断str在string字符串中的位置（下标）.不在抛出错误。从左查.
print('hello'.index('l'))
# print('hello'.index('d'))

# TODO string.rindex(str) 判断str在string字符串中的位置（下标）.不在抛出错误。从右查.
print('hello'.rindex('l'))
# print('hello'.rindex('d'))
print('==' * 20)

# 所有对字符串产生影响的操作，都是返回新的字符串，不会影响原字符串
# TODO string.replace(原字符串， 新字符串[,count] )  将原字符串替换为新字符串
# count:能替换的最大次数。默认-1表示全部替换。
str1 = 'python and mysql or python'
str2 = str1.replace('python', 'java', 1)

print(str1)
print(str2)

# TODO string.upper()  将字母转换为大写
print('hello'.upper())

# TODO string.lower()  将字母转换为小写
print('HELLO'.lower())

# TODO string.title() 将字符串中所有单词的首字母大写
print('hello world'.title())

# TODO string.capitalize() 将字符串首字母大写
print('hello world'.capitalize())

# TODO string.swapcase() 反转大小写
print('Hello World'.swapcase())

# TODO * string.split(str[, num]) 利用str将字符串拆分为列表
# num:拆分最大次数
print('python,mysql,linux'.split(','))
print('python, mysql, linux'.split(' '))
print('python,mysql,linux'.split('y'))

print('python,mysql,linux'.split(',', 1))
print('==' * 20)

# TODO * string.join(容器) 利用string将容器中的元素拼接成一个新的字符串
list1 = ['python', 'mysql', 'linux']
print('-'.join(list1))
print(','.join(list1))
print('='.join(list1))
print(' '.join(list1))
t1 = ('a', 'b', 'c')
print('-'.join(t1))
str1 = 'abc'
print('-'.join(str1))

# TODO string.partition(str) 利用str将string分割成3个元素的元组, 从左找str
print('abc'.partition('b'))
print('aaaaaaabbbbccccccc'.partition('bbbb'))

# TODO string.rpartition(str) 利用str将string分割成3个元素的元组 从右找str
print('aaaaaaabbbbccccccc'.rpartition('b'))

# TODO string.splitlines() 利用换行将string分割成列表
print('hello\nworld'.splitlines())

# TODO * string.strip([str])  去除两边的str,不写str，去除的就是空格
print(' hello    '.strip())
print('123hello123'.strip('123'))
print('==' * 20)

# TODO * string.lstrip([str]) 去除左边的str。不写str，去除左边是空格
print(' hello    '.lstrip())
print('123hello123'.lstrip('123'))
print('==' * 20)

# TODO * string.rstrip([str]) 去除右边的str。不写str，去除右边是空格
print(' hello    '.rstrip())
print('123hello123'.rstrip('123'))

str1 = '12hello12 '
print(str1.strip('12'))

# 去除字符串两边的字符串
"""
''.strip()
''.lstrip()
''.rstrip()
"""

# 判断开始和结尾
"""
''.startswith()
''.endswith()
"""

# 字符串分割和合并
"""
''.split()
''.join()
"""

# 字符串替换
"""
''.replace('old_str', 'new_str')
"""

# 判断方法
"".isdigit()
''.isalpha()
''.isalnum()